package com.tgy.leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * https://leetcode-cn.com/problems/continuous-subarray-sum/
 * 给你一个整数数组 nums 和一个整数k ，编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组：
 * <p>
 * 子数组大小 至少为 2 ，且
 * 子数组元素总和为 k 的倍数。
 * 如果存在，返回 true ；否则，返回 false 。
 * <p>
 * 如果存在一个整数 n ，令整数 x 符合 x = n * k ，则称 x 是 k 的一个倍数。
 * <p>
 * 输入：nums = [23,2,4,6,7], k = 6
 * 输出：true
 * 解释：[2,4] 是一个大小为 2 的子数组，并且和为 6 。
 */
public class _523_连续的子数组和 {

    public static boolean checkSubarraySum(int[] nums, int k) {

        if (nums == null || nums.length == 0 || nums.length == 1) {
            return false;
        }

        int len = nums.length;
        Map<Integer,Integer> map = new HashMap<>();

        map.put(0,-1);

        int sum = 0;

        for (int i = 0; i < len; i++) {

            sum = (sum + nums[i]) % k;

            if (map.containsKey(sum)) {

                if (i - map.get(sum) >= 2) {

                    return true;
                }
            }else {

                map.put(sum,i);
            }

        }

        return false;
    }

    public static void main(String[] args) {

        int[] nums = {23,2,4,6,7};
        int k = 6;
        System.out.println(checkSubarraySum(nums, k));

    }
}
